let fs = require('fs')
let sd = require('silly-datetime')
let path = require('path')
let dbPath = path.join(__dirname, '../data/historys.json')

exports.find = (callback) => {
  fs.readFile(dbPath, 'utf8', (err, data) => {
    if (err)
      return callback(err)
    callback(null, JSON.parse(data).historys)
  })
}

exports.save = function (student, callback) {
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    var historys = JSON.parse(data).historys

    // 添加 id ，唯一不重复
    if (historys.length == 0) {
      student.id = 1
    } else {
      student.id = historys[0].id + 1
    }
    student.time = sd.format(new Date(), 'YYYY-MM-DD HH:mm:ss')
    // 把用户传递的对象保存到数组中
    historys.unshift(student)

    // 把对象数据转换为字符串
    var fileData = JSON.stringify({
      historys: historys
    })

    // 把字符串保存到文件中
    fs.writeFile(dbPath, fileData, function (err) {
      if (err) {
        // 错误就是把错误对象传递给它
        return callback(err)
      }
      // 成功就没错，所以错误对象是 null
      callback(null)
    })
  });
}


exports.deleteById = function (id, callback) {
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    var historys = JSON.parse(data).historys

    // findIndex 方法专门用来根据条件查找元素的下标
    var deleteId = historys.findIndex(function (item) {
      return item.id === parseInt(id)
    })

    // 根据下标从数组中删除对应的学生对象
    historys.splice(deleteId, 1)

    // 把对象数据转换为字符串
    var fileData = JSON.stringify({
      historys: historys
    })

    // 把字符串保存到文件中
    fs.writeFile(dbPath, fileData, function (err) {
      if (err) {
        // 错误就是把错误对象传递给它
        return callback(err)
      }
      // 成功就没错，所以错误对象是 null
      callback(null)
    })
  })
}
